perm filename PPSRT.F4[XX,LCS]3 blob
sn#194623 filedate 1975-12-29 generic text, type T, neo UTF8
00100 C SUBRS. SLUR, PLTSRT, (LINES, RDRAW)
00200
00300 SUBROUTINE SLUR
00400 IMPLICIT INTEGER(A-Q,T-Z)
00500 COMMON/SLR/ SLURX(72) /ALF/INP,SLURY(72)
00600 REAL CENTR
00700 COMMON /PLTR/PLT,RHT,RDIS
00800 COMMON R2,JA,CENTR,J2,R3,R4,R5,R6,R7,R8,R9,R10,RA,RB,
00900 1 K,KQ,TWICE,RST7,RX,RXX,RTILT,RC,RZ,RW,J3,J4,
01000 1 J5,J6,J7,J8,J9,J10,J11,JQ(7),R,RJ
01100 COMMON/PTR/PWDS(250),ITEM,L,I,IX /STF/RSTFAC(-3/4),RSTJ2
01200 CF DATA RZZ/2.8/
01300 C DEFAULT VALUE OF SLUR CURVE FACTOR IS 2.8
01400
01500 IF(JA.NE.12)GO TO 2
01600 CF RA=5.96*RSJT2*R5
01700 CF L=3
01800 CF J8=J8*RDIS
01900 CF IF(J7.LE.J6)J7=J7+360
02000 CF KQ=6
02100 CF IF(PLT)KQ=1
02200 CF10 DO 3 K=J6,J7,KQ
02300 CF R=K
02400 CF CALL LINES(R3+RA*SIND(R),CENTR+RA*COSD(R),L)
02500 CF3 L=2
02600 CF J8=J8-1
02700 CF IF(J8)RETURN
02800 CF RA=RA+1/RDIS
02900 CF L=3
03000 CF GO TO 10
03100 CJA=12 DRAWS CIRCLES. P5=RADIUS, P6=DEGR.1, P7=DEGR.2,P8=THICK(EXPANDS
03200 CALL CIRCLE
03300 RETURN
03400
03500 2 J10=1
03600 J4=-1
03700 KQ=6
03800 TWICE=-1
03900 C -1 FOR DISPLAY, USES ONLY 1/3 OF SEGMENTS
04000 IF(PLT.GE.0)GO TO 21
04100 TWICE=0
04200 KQ=1
04300 RWID=.2
04400 IF(RHT.LT.2)GO TO 21
04500 TWICE=1
04600 RWID=.14
04700 C IF SIZE IS GT.2 3 SLURS ARE DRAWN
04800 21 RST7=RSTJ2*7.
04900 RQQ=R5-R4
05000 IF(R6.GT.1000)CALL RNOTE(R6)
05100 GO TO (5,6,7),J8+4
05200 GO TO 4
05300 5 R=32
05400 C AFTER DOTTED NOTE
05500 GO TO 8
05600 6 R=22
05700 C BETWEEN NOTES
05800 8 RX=-1.3
05900 GO TO 9
06000 7 R=7
06100 RX=RSTJ2
06200 9 CALL RJBX(R)
06300 R6=R6+RX
06400 4 RXX=RHORZ(R6)-R3
06500 RTILT=RQQ*RST7
06600 80 RX=SQRT(RXX**2+RTILT**2)
06700 IF(J8.NE.-1)GO TO 10
06800 IF(RQQ.GT.8)RQQ=8
06900 IF(RQQ.LT.-8)RQQ=-8
07000 RQQ=RQQ*RSTFAC(J2)*1.0
07100 IF(R7)RQQ=-RQQ
07200 R3=R3-RQQ
07300 C MOVES STEEP SLUR LEFT OR RIGHT IF P8=-1
07400 10 RJ=ABS(R7)
07500 C R7+100=LEFT HALF SLUR, +200=RIGHT HALF, +300=REVERSE DIRECTION.(300 NOT DONE)
07600 IF(RJ.LT.100)RJ=-1
07700 IF(RJ.GE.300)RJ=0
07800 R7=AMOD(R7,100.0)
07900 1 R=CENTR
08000 IF(J8.GT.0)GO TO 180
08100 L=72
08200 C FOR BRACKETS
08300 CALL SLOOP
08400 CF RB=RX/71.
08500 CF DO 81 K=0,71
08600 CF81 SLURX(K+1)=RB*(K)+R3
08700 CF RA=R7*RST7
08800 CF41 IF(R9.EQ.0)R9=RZZ
08900 CF R=R+RA
09000 CF L=0
09100 CF DO 40 K=36,1,-1
09200 CF L=L+1
09300 CF RW=R-RA*(K/36.)**R9
09400 CF SLURY(L)=RW
09500 CF40 SLURY(73-L)=RW
09600 CF L=72
09700
09800 CF89 IF(RTILT.EQ.0)GO TO 87
09900 CF RW=ATAN2(RTILT,RXX)
10000 CF RA=SIN(RW)
10100 CF RB=COS(RW)
10200 CF RZ=SLURX(1)
10300 CF RW=SLURY(1)
10400 CF DO 83 K=1,L
10500 CF R=SLURX(K)-RZ
10600 CF RXX=SLURY(K)-RW
10700 CF SLURX(K)=RB*R-RA*RXX+RZ
10800 CF83 SLURY(K)=RB*RXX+RA*R+RW
10900
11000 87 IF(J4)CALL LINES(SLURX(J10),SLURY(J10),3)
11100 J5=KQ
11200 J6=J10
11300 J7=L
11400 IF(J4.NE.0)GO TO 22
11500 CALL EXCH(J6,J7)
11600 J5=-1
11700 22 DO 88 K=J6,J7,J5
11800 88 CALL LINES(SLURX(K),SLURY(K),2)
11900 IF(TWICE)RETURN
12000 TWICE=TWICE-1
12100 IF(J8.GT.0)GO TO 182
12200 J4=J4+1
12300 R7=R7+RWID
12400 C RWID=WIDTH OF SLUR -- SEE DATA
12500 GO TO 1
12600 180 RW=R+R7*RST7
12700 TWICE=-1
12800 KQ=1
12900 RX=RX+R3
13000 CC RA=(R5-R4)*RST7
13100 IF(J9.EQ.0)GO TO 181
13200 TWICE=2
13300 RZ=RTILT/(RX-R3)
13400 RXX=RX
13500 RWID=(R3+RXX)/2.
13600 182 IF(TWICE.EQ.1)GO TO 183
13700 C DOES LEFT SIDE FIRST.
13800 IF(TWICE.EQ.0)GO TO 184
13900 C LAST IS NUMBER.
14000 J8=2
14100 RC=RSTJ2*13.
14200 RX=RWID-RC
14300 RWW=RTILT
14400 185 RTILT=RZ*(RX-R3)
14500
14600 C PUT IN FUNC. HERE FOR THIS SLOPE AND FOR PART. BEAMS.
14700
14800 GO TO 181
14900 183 J8=3
15000 RX=RXX
15100 RTILT=RWW
15200 RXX=R3
15300 R3=RWID+RC
15400 RXX=RZ*(R3-RXX)
15500 R=R+RXX
15600 RW=RW+RXX
15700 GO TO 185
15800
15900 181 SLURX(1)=R3
16000 SLURY(1)=R
16100 SLURX(2)=R3
16200 SLURY(2)=RW
16300 SLURX(3)=RX
16400 SLURY(3)=RW+RTILT
16500 SLURX(4)=RX
16600 SLURY(4)=R+RTILT
16700 L=4
16800 IF(J8.EQ.2)L=3
16900 IF(J8.EQ.3)J10=2
17000 CC TWICE=-1
17100 GO TO 87
17200 184 J3=RWID
17300 C PUT IN VERT. POS. WHEN SLOPE!
17400 R4=RQQ/2.+R4+R7-1.
17500 R6=1.
17600 R7=1.
17700 R8=0
17800 CALL MAKNUM(R9)
17900 END
18000 C 8, POS1, STF, NT1, NT2, POS2, DIP(ABS. UNITS), P8
18100 C FOR P8: 0= SLUR, 1=BRACKETS, 2=LFT ONLY, 3=RT ONLY
18200
18300
18400 SUBROUTINE PLTSRT
18500 C SORTS DATA TO SHORTEN INVISIBLE VECTORS WHEN PLOTTING.
18600 CF IMPLICIT INTEGER(S-Z)
18700 COMMON /XRN/RN(4000) /PTR/PWDS(250),ITEM,L,I,IX
18800 DIMENSION P(250)
18900 CALL PSRT(P)
19000 END
19100
19200 CF DO 4 K=1,ITEM
19300 CF L=PWDS(K)
19400 CF LL=PWDS(K-1)
19500 CF LM=PWDS(K+1)
19600 CF A=RN(L+3)
19700 CF P(K)=A+1000*RN(L+2)
19800 CF IF(RN(L+1).NE.16)GO TO 40
19900 CF Y=PWDS(K-1)
20000 CF V=PWDS(K+1)
20100 CF IF(RN(Y+1).EQ.16)GO TO 41
20200 CF IF(RN(V+1).EQ.16)GO TO 41
20300 CF GO TO 4
20400 CF40 IF(A.GE.0)GO TO 4
20500 CF41 P(K)=-10000
20600 CF4 CONTINUE
20700 C PLOTS ALL NEG. POSITIONS FIRST.
20800 CF IX=I
20900 CF IF(I.LT.1500)I=1500
21000 CF Y=I
21100 CF I=I+IX-1
21200 CF IX=Y
21300 C IX IS M IN MAIN PROG.
21400 C LEAVES 1500 WDS IN RN FOR STORING "NOIR" DATA.
21500 CF2 A=P(1)
21600 CF L=1
21700 CF DO 1 K=1,ITEM
21800 CF IF(A.LE.P(K))GO TO 1
21900 CF A=P(K)
22000 CF L=K
22100 CF1 CONTINUE
22200 CF IF(A.EQ.10000.)RETURN
22300 C ALL ITEMS HAVE NOW BEEN SHUFFLED
22400 CF V=PWDS(L)
22500 CF P(L)=10000
22600 CF L=RN(V)+2+Y
22700 CF V=V-Y
22800 CC CALL LOOP(0,L,1,Y,V,RN)
22900 CF DO 3 K=Y,L
23000 CF3 RN(K)=RN(K+V)
23100 C REPLACED SUBROUTINE LOOP
23200 CF Y=L+1
23300 CF GO TO 2
23400 CF END
23500
23600
23700 CX SUBROUTINE LINES(A,B,L)
23800 CX COMMON /FL/IC,NZ,NX,RZ,XGP
23900 CX COMMON/DL/IIII,SAVER,AA /PLTR/IPLT,RHT,DIS
24000 CX COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
24100 CX COMMON/DPY/GO,TOP,BOT
24200 CX DATA BB/260.0/,CC/3.5/,DD/1.43/,MX/512/
24300 C SET XGP TO 1245.0 FOR MARGIN IN XEROX COPIES
24400 CX22 GO TO 23
24500 C CHANGE ABOVE TO 'J6CL' IN DDT TO USE NEXT ITEMS.
24600 CX24 AA=CC-DD*ABS(A)/BB
24700 C USE THIS IN DDT TO DISTORT ITEMS. CC MUST BE > DD
24800 CX B=B*AA
24900 CX23 IF(IPLT)GO TO 2
25000 CX IF(JA.EQ.44)RETURN
25100 CC K=B
25200 CC IF(K.GT.ITOP)ITOP=B
25300 CC IF(K.LT.IBOT)IBOT=B
25400 CX IF(B.GT.TOP)TOP=B
25500 CX IF(B.LT.BOT)BOT=B
25600 CX6 RETURN
25700 CC2 IF(IPLT.EQ.-2)RETURN
25800 C RXGP SETS UP-DOWN POS. ON XEROX PAPER (FRACTIONAL POSITIONS POSSIBLE.)
25900 CC IF(IXRX.EQ.0)GO TO 9
26000 CC M=ROFF(RXGP-B*RHT)
26100 CC N=ROFF(XGP+A*DIS)
26200 CC GO TO 8
26300 CX2 M=ROFF(A*DIS)
26400 CX N=ROFF(B*RHT)
26500 CX8 CALL PLOT(M,N,L)
26600 CX END